package helper

import (
	"encoding/base64"
	"fmt"
	"io/ioutil"
	"os"
	"strconv"
	"time"
)

func FileToBase64(file os.File) string {
	// file 转 base64
	fileBytes, err := ioutil.ReadFile(file.Name()) // 读取file
	if err != nil {
	}

	bs64 := base64.StdEncoding.EncodeToString(fileBytes) // 加密成base64字符串

	fmt.Println(bs64)

	return bs64
}

// getBirthday 根据身份证获取对应生日
func GetBirthday(cardId string) string {
	// 兼容第一代15位身份证号码
	if len(cardId) == 15 {
		// 第一代身份证年份都是19开头的
		return fmt.Sprintf("19%s", cardId[6:12])
	} else {
		return cardId[6:14]
	}
}

// getAgeByBirthday 根据生日日期得到用户年龄
func GetAgeByBirthday(cardId string) string {
	birthday := GetBirthday(cardId)
	year, _ := strconv.Atoi(birthday[0:4])
	month, _ := strconv.Atoi(birthday[4:6])
	day, _ := strconv.Atoi(birthday[6:])

	// 计算当前日期与生日中年月日都差值
	now := time.Now()
	age := now.Year() - year
	moreMonth := int(now.Month()) - month
	moreDay := now.Day() - day

	// 未到生日月份，或者到了月份，但未到生日日期，年龄都要减1岁
	if moreMonth < 0 || (moreMonth == 0 && moreDay < 0) {
		age--
	}
	// 不要出现负值
	if age < 0 {
		age = 0
	}

	return strconv.Itoa(age)
}

func Str2int(str string) (int, error) {
	num, err := strconv.Atoi(str)
	if err != nil {
		fmt.Printf("转换出错: %v\n", err)
		return 0, err
	}
	fmt.Printf("转换后的整数为: %d\n", num)
	return num, nil
}
